package conUDP;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
import java.net.SocketTimeoutException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class SocketUDP extends DatagramSocket {
    //private DatagramSocket socket;

    private int numMaxTentativas = 5;
    private boolean recebeu = false;

    public SocketUDP(int porta) throws SocketException {
        super(porta);
        //this.porta = porta;
        //socket = new DatagramSocket(porta);
    }

    public SocketUDP() throws SocketException {
        super();
        //socket = new DatagramSocket();
    }

    public boolean envia(DatagramPacket pacote_envia, DatagramPacket pacote_recebe) {
        //DatagramPacket pacRecebimento = null;

        //for (int i = 0; i < numMaxTentativas/* && !recebeu*/; i++) {
            //System.out.println("pacote de envio>>" + new String(pacote_envia.getData()) + pacote_envia.getAddress() + ":" + pacote_envia.getPort());
            try {
                this.send(pacote_envia);
                this.setSoTimeout(200);
                this.receive(pacote_recebe);
            } catch (SocketTimeoutException ex) {
                //System.out.println("CABOU TEMPO");
                return false;
            } catch (IOException ex) {
                Logger.getLogger(SocketUDP.class.getName()).log(Level.SEVERE, null, ex);
            } finally {
                if (new String(pacote_recebe.getData()).equals("ON")) {
                  //  System.out.println("RECEBEU ON");
                    return true;
                }
            }
        return false;
    }

    public void recebe(DatagramPacket pacote_recebe, DatagramPacket pacote_envia) throws IOException, InterruptedException {

        //System.out.println("ESPERANDO SINAL");
        this.receive(pacote_recebe);
        //System.out.println("IP Q MANDOU" + pacote_recebe.getAddress() + "PORTA QUE MANDOU:" + pacote_recebe.getPort());
        //System.out.println("SINAL RECEBIDO");
        this.send(pacote_envia);
        //System.out.println("SINAL ENVIADO");
    }
}
